package com.bootcamp.s3_1013.database.utils;


import java.sql.Connection;
import java.util.LinkedList;

/**
 * @program: myClassCode
 * @description: my own connection pool
 * @author: Keyu Li
 * @create: 2021-10-18 17:16
 **/

public class MyConnectionPool {
    /** TODO: 使用配置文件设置各种参数；
     *  TODO：connection超时自动回收，避免维护无效连接（定时器，异步回收）
     *  TODO：设置获取connection的等待机制
     */

    //使用链表实现池子，从头部取出，放回尾部
    static LinkedList<Connection> list;
    //设置初始化容量
    static int INIT_SIZE = 5;
    //临界值
    static int MIN_SIZE = 2;
    //扩容大小
    static int INCREMENT_SIZE = 5;

    //初始化池子
    static {
        list = new LinkedList<>();
        addCapacity(INIT_SIZE);
    }

    //获取connection
    public synchronized static Connection getConnection() {
        if (list.size() < MIN_SIZE) {
            addCapacity(INCREMENT_SIZE);
        }
        return list.removeFirst();
    }

    //扩容
    private static void addCapacity(int size) {
        for (int i = 0; i < size; i++) {
            list.addLast(JDBCUtils.getConnection());
        }
    }

    //放回connection
    public synchronized static void putConnection(Connection c) {
        if (c==null) return;
        list.addLast(c);
    }
}
